//封装axios网络请求 

import axios from "axios"
import querystring from "querystring"

// 定义相应错误函数,处理协议状态码信息提示


//处理失败的方法
//     status:状态
//     info:错误信息
//
const errorHandle = (status,info) =>{
    switch(status){
        case 400:
            console.log("语义有误");
            break;
        case 401:
            console.log("服务器认证失败");
            break;
         case 403:
            console.log("服务器拒绝访问");
            break;
        case 404:
            console.log("地址错误");
            break;
         case 500:
            console.log("服务器遇到意外");
            break;
        case 502:
            console.log("服务器无响应");
            break;
        default:
            console.log(info);
            break;
    }
}


const instance = axios.create({
	//网络请求的公共配置
	timeout:5000
})


//拦截器最常用的

//发送数据之前
instance.interceptors.request.use(
	//成功的函数
    config =>{
        if(config.methods === "post"){
            config.data = querystring.stringify(config.data)
        }
    
        //config包含着网络请求的所有信息
        return config;
    },
    //失败的函数
    error =>{
        return Promise.reject(error)
    }

)


//获取数据之前
instance.interceptors.response.use(
	//成功
    response =>{
        return response.status === 200 ? Promise.resolve(response) : Promise.reject(response)
    },
    error =>{
        const{ response } = error;
        //错误的处理才是我们最关注的
        errorHandle(response.status,response.info)
    }
)

export default instance;